package com.ruoyi.system.mapper;

import com.ruoyi.common.core.domain.entity.system.SysBoat;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * 船只信息Mapper接口
 *
 * @author zjw
 * @date 2023-06-21
 */
public interface SysBoatMapper {
    /**
     * 查询船只信息
     *
     * @param boatId 船只信息主键
     * @return 船只信息
     */
    public SysBoat selectSysBoatByBoatId(Long boatId);

    /**
     * 查询船只信息列表
     *
     * @param sysBoat 船只信息
     * @return 船只信息集合
     */
    public List<SysBoat> selectSysBoatList(SysBoat sysBoat);

    /**
     * 新增船只信息
     *
     * @param sysBoat 船只信息
     * @return 结果
     */
    public int insertSysBoat(SysBoat sysBoat);

    /**
     * 修改船只信息
     *
     * @param sysBoat 船只信息
     * @return 结果
     */
    public int updateSysBoat(SysBoat sysBoat);

    /**
     * 删除船只信息
     *
     * @param boatId 船只信息主键
     * @return 结果
     */
    public int deleteSysBoatByBoatId(Long boatId);

    /**
     * 批量删除船只信息
     *
     * @param boatIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteSysBoatByBoatIds(Long[] boatIds);

    SysBoat selectSysBoatByBoatIdentityId(String boatIdentityId);

    /**
     * 获取指定景区下指定码头中所有空闲的船只。
     *
     * @param scenicId
     * @param wharfId
     * @return
     */
    List<SysBoat> selectAllIdleSysBoatByScenicIdAndWharfId(@Param("scenicId") Long scenicId, @Param("wharfId") Long wharfId);

    /**
     * 获取指定景区下指定码头中所有正处于拼团中的船只列表。
     *
     * @param scenicId
     * @param wharfId
     * @return
     */
    List<SysBoat> getAllGroupbookingBoatList(@Param("scenicId") Long scenicId, @Param("wharfId") Long wharfId);

    List<SysBoat> getAllIdleAndGroupbookingBoatList(@Param("scenicId") Long scenicId, @Param("wharfId") Long wharfId);

    int updateBoatStatusByBoadId(@Param("boatId") Long boatId, @Param("status") int status, @Param("statusDesc") String statusDesc, @Param("updateTime") Date updateTime);

    List<SysBoat> getBoatListByScenicId(Long scenicId);

    void updateBoatLocationInfo(@Param("boatId") Long boatId, @Param("lon") Double lon, @Param("lat") Double lat, @Param("orientation") Integer orientation);

    void updateAllBoatStatus(@Param("boatStatusCode") int boatStatusCode, @Param("boatStatusInfo") String boatStatusInfo);

}
